//package com.openapi.job;
//
//import com.auth0.jwt.exceptions.JWTDecodeException;
//import com.common.utils.R;
//import com.openapi.protocol.BlueChipsServer;
//import com.openapi.protocol.PinzhiServer;
//import com.openapi.protocol.TaskDistribution;
//import io.swagger.annotations.Api;
//import io.swagger.annotations.ApiImplicitParam;
//import io.swagger.annotations.ApiImplicitParams;
//import io.swagger.annotations.ApiOperation;
//import org.apache.log4j.Logger;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.boot.CommandLineRunner;
//import org.springframework.context.annotation.Bean;
//import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
//import org.springframework.scheduling.support.CronTrigger;
//import org.springframework.web.bind.annotation.GetMapping;
//import org.springframework.web.bind.annotation.RestController;
//
//import java.net.URISyntaxException;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.concurrent.ScheduledFuture;
//
//@RestController
//@Api(description = "网关对接出入口--调用定时任务")
//public class DynamicTiminTasks implements CommandLineRunner {
//    private final static Logger log = Logger.getLogger(DynamicTiminTasks.class);
//
//    @Value("${eems.serviceIp}")
//    private String serviceIp;
//
//    @Autowired
//    private ThreadPoolTaskScheduler threadPoolTaskScheduler;
//
//    public static Map<String, ScheduledFuture<?>> taskmap=new HashMap<>();
//
//    @Autowired
//    public static TaskThread tt;
//
//    @Autowired
//    TaskDistribution task;
//
//    public static  int falg = 0;
//
//    private int count;
//    @Bean
//    public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
//        return new ThreadPoolTaskScheduler();
//    }
//
//    @ApiOperation("启动定时任务")
//    @ApiImplicitParams({
//            @ApiImplicitParam(name = "controllerPath", paramType = "path", allowableValues = "gateWay", required = true)
//    })
//    @GetMapping(value = "/{controllerPath}/start")
//    public R  start() {
//        R r = new R();
//        try {
//            ScheduledFuture<?> futureOld = taskmap.get("task1");
//            if (futureOld != null) {
//                r.put("code", 200);
//                r.put("msg", "操作成功");
//                r.put("data", "定时任务已经启动");
//                return r;
//            }
//            log.info("定时任务已经启动");
//            tt = new TaskThread( "222");
////            ScheduledFuture<?> future = threadPoolTaskScheduler.schedule(tt, new CronTrigger("0 * * * * *"));
//            ScheduledFuture<?> future = threadPoolTaskScheduler.schedule(tt, new CronTrigger("0 */5 * * * *"));//间隔5分钟检查一次检查十次无新任务就关闭服务就关闭服务
//            taskmap.put("task1", future);
//            count = 0;
//            r.put("code", 200);
//            r.put("msg", "操作成功");
//            r.put("data", "启动定时任务成功");
//            return r;
//        }catch (JWTDecodeException e) {
//            r.put("code", 1003);
//            r.put("msg", "token 认证失败或失效,请重新获取token");
//            return r;
//        } catch (Exception e){
//            r.put("code", 500);
//            r.put("msg", "系统异常");
//            return r;
//        }
//    }
//    @ApiOperation("停止定时任务")
//    @ApiImplicitParams({
//            @ApiImplicitParam(name = "controllerPath", paramType = "path", allowableValues = "gateWay", required = true)
//    })
//    @GetMapping(value = "/{controllerPath}/stop")
//    public R stop() {
//        R r = new R();
//        try {
//            ScheduledFuture<?> future=taskmap.get("task1");
//            if (future != null) {
//                future.cancel(true);
//            }
//            log.info("关闭定时任务成功");
//            count=0;
//            r.put("code", 200);
//            r.put("msg", "操作成功");
//            r.put("data", "关闭定时任务成功");
//            return r;
//        }catch (JWTDecodeException e) {
//            r.put("code", 1003);
//            r.put("msg", "token 认证失败或失效,请重新获取token");
//            return r;
//        } catch (Exception e){
//            r.put("code", 500);
//            r.put("msg", "系统异常");
//            return r;
//        }
//    }
//    @ApiOperation("修改定时任务")
//    @ApiImplicitParams({
//            @ApiImplicitParam(name = "controllerPath", paramType = "path", allowableValues = "gateWay", required = true)
//    })
//    @GetMapping(value = "/{controllerPath}/change")
//    public R change() {
//        R r = new R();
//        try {
//            stop();// 先停止，在开启.
//            ScheduledFuture<?> future= taskmap.get("task1");
//            future = threadPoolTaskScheduler.schedule(tt, new CronTrigger("*/60 * * * * *"));//间隔60秒检查一次 检查十次无新任务就关闭服务就关闭服务
//            taskmap.put("task1", future);
//            count=1;
//
//            r.put("code", 200);
//            r.put("msg", "操作成功");
//            r.put("data", "修改定时任务成功");
//            return r;
//        }catch (JWTDecodeException e) {
//            r.put("code", 1003);
//            r.put("msg", "token 认证失败或失效,请重新获取token");
//            return r;
//        } catch (Exception e){
//            r.put("code", 500);
//            r.put("msg", "系统异常");
//            return r;
//        }
//    }
//
//    //内部类
//    public class TaskThread implements Runnable {
//
//        private String id;
//
//        public TaskThread( String id) {
//            this.id = id;
//        }
//
//        @Override
//        public void run() {
//            log.info("任务完成后,无新的任务半个小时候自动切换为巡检模式！");
//            if (count > 10) {
//                stop();//关闭立即响应服务
//                start();//启动巡检机制
//            } else {
//                //检查是否有待完成的任务，如果有就需要完成ETL配置下发 count值不变，如果没有就需要++
//                int task_status = 0;
//                try {
//                    log.info("启动任务！");
//                    task_status = task.readTask();
//                } catch (URISyntaxException e) {
//                    e.printStackTrace();
//                }
//
//                if(count>0 && task_status==0){
//                    count++;
//                }
//            }
//        }
//    }
//
//    @Override
//    public void run(String... args) throws Exception{
//        log.info("启动网关线程！");
//        //一个厂家一个线程 单独处理每个厂家的协议和报文
//        new Thread(new BlueChipsServer(2004,serviceIp)).start();
//        new Thread(new PinzhiServer(2002,serviceIp)).start();
//
//        //根据传来的参数执行要定时的任务
//        log.info("启动定时监控任务！");
//        start();
//
//    }
//}
